/* 
 * Grau.java
 * 
 * Data de criação: 05/09/2010
 * 
 * O2SOLUTIONS - SOLUÇÕES EM TECNOLOGIA DA INFORMAÇÃO. 
 *
 */
package br.com.o2solutions.siso.integration.entidade;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;

import br.com.o2solutions.core.integration.repository.entity.BaseEntity;
import br.com.o2solutions.siso.integration.entidade.enumerator.TipoGrauEnumerator;

/**
 * Classe responsável por representar o Grau (Relacionado ao sistema de
 * posicionamento global) GPS.
 * 
 * @author Osvaldeir
 * @since 05/09/2010
 * 
 */
@Entity
@Table(name = "TBGRAU")
@SequenceGenerator(name = "SQGRAU", sequenceName = "SQGRAU")
public class Grau extends BaseEntity<Integer> {

	private static final long serialVersionUID = 1L;

	private final static int GRAU_PRECISION = 2;

	@Id
	@Override
	@Column(name = "GRAUID")
	@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SQGRAU")
	public Integer getId() {
		return super.getId();
	}

	private Float valor;

	private Float minuto;

	private Float segundo;

	private TipoGrauEnumerator tipoGrau;

	/**
	 * Retorna o(a) tipoGrau.
	 * 
	 * @return TipoGrauEnumerator
	 */
	@Enumerated(EnumType.STRING)
	@Column(name = "TIPOGRAU", nullable = false)
	public TipoGrauEnumerator getTipoGrau() {
		return tipoGrau;
	}

	/**
	 * Atribui o(a) tipoGrau.
	 * 
	 * @param tipoGrau
	 *            TipoGrauEnumerator
	 */
	public void setTipoGrau(TipoGrauEnumerator tipoGrau) {
		this.tipoGrau = tipoGrau;
	}

	/**
	 * Retorna o(a) valor.
	 * 
	 * @return Float
	 */
	@Column(name = "VALOR", nullable = false, precision = GRAU_PRECISION)
	public Float getValor() {
		return valor;
	}

	/**
	 * Atribui o(a) valor.
	 * 
	 * @param valor
	 *            Float
	 */
	public void setValor(Float valor) {
		this.valor = valor;
	}

	/**
	 * Retorna o(a) minuto.
	 * 
	 * @return Float
	 */
	@Column(name = "MINUTO", nullable = false, precision = GRAU_PRECISION)
	public Float getMinuto() {
		if (minuto == null) {
			minuto = new Float("0");
		}

		return minuto;
	}

	/**
	 * Atribui o(a) minuto.
	 * 
	 * @param minuto
	 *            Float
	 */
	public void setMinuto(Float minuto) {
		this.minuto = minuto;
	}

	/**
	 * Retorna o(a) segundo.
	 * 
	 * @return Float
	 */
	@Column(name = "SEGUNDO", nullable = false, precision = GRAU_PRECISION)
	public Float getSegundo() {
		if (segundo == null) {
			segundo = new Float("0");
		}
		return segundo;
	}

	/**
	 * Atribui o(a) segundo.
	 * 
	 * @param segundo
	 *            Float
	 */
	public void setSegundo(Float segundo) {
		this.segundo = segundo;
	}

	/**
	 * Retorna um grau do tipo Altitude.
	 * 
	 * @return Grau
	 */
	public final static Grau createAltitude() {
		Grau grau = new Grau();
		grau.setTipoGrau(TipoGrauEnumerator.ALTITUDE);
		return grau;
	}

	/**
	 * Retorna um grau do tipo Longitude.
	 * 
	 * @return Grau
	 */
	public final static Grau createLongitude() {
		Grau grau = new Grau();
		grau.setTipoGrau(TipoGrauEnumerator.LONGITUDE);
		return grau;
	}

	/**
	 * Retorna um grau do tipo Latitude.
	 * 
	 * @return Grau
	 */
	public final static Grau createLatitude() {
		Grau grau = new Grau();
		grau.setTipoGrau(TipoGrauEnumerator.LATITUDE);
		return grau;
	}

}
